package main

import (
	"fmt"
	"unicode/utf8"
)

//string是不可变的字节序列，采用UTF-8编码。
//bytes rune是可变的字节序列，采用UTF-8编码。
//rune是int32的别名，代表字符的Unicode编码，采用4个字节存储。
//for range对字符串遍历，获取的对象是rune类型的，因此不会乱码；
//string采用 传统for和len 遍历会出现乱码情况，UTF8中一个字符表示的不会乱码，超过1个的会乱码。
//string是只读字符串，bytes rune是可写版字符串。
func main() {

	const myName = "李新佳"
	fmt.Println("len()=", len(myName))

	for i := 0; i < len(myName); i++ {
		fmt.Printf("%x ", myName[i])
	}

	fmt.Println("rune count,", utf8.RuneCountInString(myName))

	for _, value := range myName {
		fmt.Printf("%c", value)
		fmt.Printf("%T", value)
	}
}
